import { Controller, Ctx, Get, Header, HttpCode, Res } from "routing-controllers";
import { Context, Response } from "koa";
import { Service } from "typedi";
import { PassThrough } from 'stream';
import { ServerResponse } from "http";

@Service()
@Controller()
export class SseController {
  // @Get("/sse")
  // sse(@Res() res: Context['res'], @Ctx() ctx: Context) {
  //   console.log(res);
  //   // ctx.status = 200;
  //   // ctx.set({
  //   //   "Content-Type": "text/event-stream",
  //   //   "Cache-Control": "no-cache",
  //   //   "Connection": "keep-alive"
  //   // })
  //   // const stream = new PassThrough();
  //   // ctx.respond = false;
  //   // stream.write(`data: ${new Date().toISOString()}\n\n`);
  //   // ctx.body = stream;
  //   ctx.res.write(`data: ${new Date().toISOString()}\n\n`);

  //   const interval = setInterval(() => {
  //     console.log('send message')
  //     // ctx.res.write(`data: ${new Date().toISOString()}\n\n`);
  //     // stream.write(`data: ${new Date().toISOString()}\n\n`);
  //   }, 1000);
  //   ctx.req.on('close', () => {
  //     console.log('close');
  //     clearInterval(interval);
  //   })

  //   // ctx.res.end();
  //   return res;
  // }

  @Get("/sse")
  sse(@Res() res: ServerResponse, @Ctx() ctx: Context) {
    ctx.set("Content-Type", "text/event-stream");
    ctx.set("Cache-Control", "no-cache");
    ctx.set("Connection", "keep-alive");
    ctx.status = 200;

    const intervalId = setInterval(() => {
      ctx.res.write(`data: ${new Date().toISOString()}\n\n`);
    }, 1000);

    // When the client closes the connection, clear the interval
    ctx.req.on('close', () => {
      clearInterval(intervalId);
    });

    ctx.respond = false;
    return Promise.resolve({});
  }
}
